package com.nidu.demo.user.gateway;

import com.nidu.demo.user.model.UserRole;

import java.util.Set;
import java.util.List;
import java.util.Map;

public interface UserRoleGateway {

    /**
     * 绑定用户与角色的关系（新增）
     */
    void bindUserRoles(Long userId, Set<Long> roleIds);

    /**
     * 重新绑定用户角色（先删再增，更新绑定关系）
     */
    void rebindUserRoles(Long userId, Set<Long> roleIds);

    /**
     * 删除用户所有角色绑定关系
     */
    void removeUserRoles(Long userId);

    /**
     * 删除角色所有用户绑定关系
     */
    void removeRoleUsers(Long roleId);

    /**
     * 删除用户列表下所有角色绑定关系
     */
    void removeUsersRoles(Set<Long> userIds);

    /**
     * 删除角色所有用户绑定关系
     */
    void removeRolesUsers(Set<Long> roleIds);

    /**
     * 查询用户拥有的角色ID列表
     */
    Set<Long> getRoleIdsByUserId(Long userId);

    /**
     * 查询角色下绑定的所有用户ID列表
     */
    Set<Long> getUserIdsByRoleId(Long roleId);

    /**
     * 查询用户ID列表拥有的角色ID列表
     */
    Map<Long, List<UserRole>> getByUserIds(Set<Long> userIds);

    /**
     * 查询角色ID列表下绑定的所有用户ID列表
     */
    Map<Long, List<UserRole>> getByRoleIds(Set<Long> roleIds);

}
